In any computer communications network, one may find a large number of source nodes vying for a limited number of resources in order to transfer data to a number of destination nodes. Typically, messages are sent from a source node via a communications line to one or more switches in a network, and then forwarded to a destination node. In addition, destination nodes will respond to message received from source nodes via a communication line, and this communication results in feedback from the destination node to the source node. As can be appreciated, when any number of source nodes begin transmitting data toward a network comprised of one or more network connections that may be described generally as network resources, each of these nodes would like to obtain the greatest amount of throughput possible in order to get the data transferred through the network resource to the respective destination nodes. Thus, the situation occurs that a number of nodes vie for the same network resource. When this occurs, a situation called "bottleneck" may occur. Bottleneck can be described generally as a condition that occurs in a network resource when all of the bandwidth within the network resource is used up by the competing source nodes trying to transfer data through it.
Various methods to control congestion at various network resources within a network are known. For example, a node wishing to send data to a network resource captures a channel to that network resource, sends data to that network resource, which subsequently transfers that data from the network resource to a destination node. In turn, the destination node may return an acknowledgment, sometimes referred to as an ACK, to the source node. In this method, the message being transferred to the network resource may carry a flag, which when a bottleneck situation is discovered in the network resource, the network resource in turn sets this flag (or bit) on the incoming message, and routes it to the destination node. The destination node, upon checking the bit or flag, finds the bit set and returns a message through the network resource back to the source node that originated the message, indicating that the source node should slow down sending messages.
Another method that is well known in the art is known as rate based congestion control. As is well known, this scheme requires a distributed computation of fair rate allocations of the total bandwidth for each network resource in the network. The generally accepted fairness metric for this method is known as max-min fair rates. With this method, the network looks at the worst bottleneck within the network, i.e., the network resource with the largest number flows passing through. Once this network resource is discovered, the rate of flows through the network resource are adjusted, and the method continues by removing that network resource from the network and then looking at the next worst bottleneck network resource. This process is continually repeated until there are no bottlenecks found.
In the so-called "end-to-end" scheme, a source node will send a rate request in an information cell to a network resource, that network resource will look at the rate request and decide which rate is appropriate to give for that connection. The network source then includes that rate in the resource cells going back to the source, and the source adjusts its throughput accordingly. As is well known with this method, the problem is how should the network resource allocate bandwidths to each flow. As is currently known, rate allocation of bandwidth is done on a "per outgoing network resource" basis.
What is desired is a method that works locally on a network resource, such as an asynchronous transfer mode (ATM) switch, to determine a specific rate allocation. With such a method, a specific rate allocation would be requested by each virtual circuit (VC), and the maximum fair rate that can be allocated for that VC by that network resource would be computed. This method would result in a computed allocation of bandwidth that is always less than or equal to the requested rate.